package exame_11Set2007;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class LivroElectronico {

	private ArrayList<Folha> esquerda = null;
	private ArrayList<Folha> direita = null;

	public LivroElectronico(ArrayList<Folha> folhas) {
		this.esquerda = new ArrayList<Folha>();
		this.direita = new ArrayList<Folha>();

		for (Folha folha : folhas) {
			this.direita.add(folha);
		}
	}

	public String paginaActual() {
		return direita.get(0).getTxt();
	}

	public void desfolhaN_(int n) {
		int numFolhasDesfolhar = 0;

		if (n > this.direita.size()) {
			numFolhasDesfolhar = this.direita.size();
		} else {
			numFolhasDesfolhar = n;
		}

		int i = 0;
		for (i = 0; i < numFolhasDesfolhar; i++) {
			this.desfolha();
		}
	}

	public void desfolha() {
		int porDesfolhar = direita.size();

		if (porDesfolhar >= 1) {
			esquerda.add(direita.get(0));
			direita.remove(0);
		}
	}

	public void desfolhaN(int n) {
		int porDesfolhar = direita.size();

		if (n > porDesfolhar) {
			int i = 0;
			while (i < porDesfolhar) {
				esquerda.add(direita.get(0));
				direita.remove(0);
				i++;
			}
		} else {
			int i = 0;
			while (i < n) {
				esquerda.add(direita.get(0));
				direita.remove(0);
				i++;

			}
		}

	}

	public void paraTrasN(int n) {
		int pagDesfolhadas = esquerda.size();
		int nAux = 0;

		if (n > pagDesfolhadas) {
			nAux = pagDesfolhadas;
		} else {
			nAux = n;
		}

		for (int i = 0; i < nAux; i++) {
			direita.add(esquerda.get(0));
			esquerda.remove(0);
		}

	}

	public Map<Integer, Folha> lidas() {

		Map<Integer, Folha> folhaslidas = new HashMap<Integer, Folha>();
		int pag = 1;
		for (Folha folha : this.esquerda) {
			folhaslidas.put(pag, folha);
			pag++;
		}

		return folhaslidas;
	}

	public void removeFolha(int n) {

		if (n < 1) {
			throw new InternalError();
		}

		int folhasEsquerda = esquerda.size();

		int nAux = 0;
		if (folhasEsquerda < n) {
			// this.esquerda = 5 pag;
			// this.direita = 10 pag;
			// removeFolha(6);
			// nAux = 6 - 5 -1 = 0

			nAux = n - folhasEsquerda - 1;
			direita.remove(nAux);
		} else {
			// this.esquerda = 5 pag;
			// this.direita = 10 pag;
			// removeFolha(5);

			nAux = n - 1;
			esquerda.remove(nAux);
		}

	}

	public void removeFolhas(int[] nums) {
		int i = 0;
		int sizeNums = nums.length;
		for (i = 0; i < sizeNums; i++) {
			removeFolha(nums[i]);
		}
	}

	public int getNumeroPaginas() {
		return this.esquerda.size() + this.direita.size();
	}

	public int folhasIguais(Folha f) {
		String folhaF = f.getTxt();
		int iguais = 0;
		for (Folha folha : this.esquerda) {
			if (folha.getTxt().equals(folhaF)) {
				iguais += 1;
			}
		}
		for (Folha folha : this.direita) {
			if (folha.getTxt().equals(folhaF)) {
				iguais += 1;
			}
		}
		return iguais;
	}

}
